(*
  Main actuel : Mapplestore prend 2 arguments :
  - 1 : La carte a analyser (exemple.bmp)
  - 2 : Le pas utilise pour l'echantillonage
*)

let main () =
  begin
    sdl_init () ;
    let fileColors = open_out "colors" in
      (* On verifie qu'il existe au moins 2 arguments *)
      if Array.length (Sys.argv) < 3 then
	failwith "Il manque au moins un argument!" ;
      (* On initialise SDL *)
      let img = Sdlloader.load_image Sys.argv.(1) in
      let param = int_of_string (Sys.argv.(2)) in
      let (w,h) = get_dims img in
	(* On cree une nouvelle image similaire a celle passee en
	   parametre afin de pouvoir travailler dessus *)
      let newImg = Sdlvideo.create_RGB_surface_format img [] w h in
      let brImg = Sdlvideo.create_RGB_surface_format img [] w h in
	(* On applique l'algorithme de detourage *)
      menage img brImg 3 ;
      contours brImg newImg fileColors ;
      let display = Sdlvideo.set_video_mode w h [`DOUBLEBUF] in
      show brImg display ;
      wait_key () ;
      Sdlvideo.save_BMP brImg "bruit.bmp" ;
	(* On ecrit le nombre de couleurs dans le fichier *)
	output_string fileColors (string_of_int ((nbColors
						    !listColors) -1 ))
  ;
	(* On affiche l'image detouree puis on la sauvegarde *)
	  show newImg display ;
	  wait_key ();
	  Sdlvideo.save_BMP newImg "contours.bmp" ;
	(* On applique l'algorithme d'echantillonage *)
	let fileObj = open_out "obj.obj" in
	  diagonalisation img newImg param fileObj ;
	(* On affiche l'image echantillonnee*)
	show newImg display ;
	wait_key () ;
	close_out fileColors ;
	(* On cree le .obj necessaire a la 3D *)
	triangleDroit img param fileObj ;
	triangleGauche img param fileObj ;
	close_out fileObj ;
	(* On sauvegarde l'image *)
	Sdlvideo.save_BMP newImg "diago.bmp" ;
	exit 0 
  end

let _ = main ()

(* End of File *)
